# 1.请实现一个装饰器，限制该函数被调用的频率，如10秒一次（面试题）
'''
import time
def func(f):
    def foo(*args, **kwargs):
        time.sleep(10)
        ret = f(*args, **kwargs)
        return ret
    return foo

@func
def index():
    print('我被限制了10秒')

index()
'''

# 2.请写出下列代码片段的输出结果：
'''
def say_hi(func):
    def wrapper(*args, **kwargs):
        print("HI")
        ret = func(*args, **kwargs)
        print("BYE")
        return ret
    return wrapper

def say_yo(func):
    def wrapper(*args, **kwargs):
        print("Yo")
        return func(*args, **kwargs)
    return wrapper

@say_hi
@say_yo
def func():
  print("ROCK&ROLL")
func()
# HI YO ROCK&ROLL BYE
'''

# 3.编写装饰器完成下列需求:
# 用户有两套账号密码,一套为京东账号密码，一套为淘宝账号密码分别保存在两个文件中。
# 设置四个函数，分别代表 京东首页，京东超市，淘宝首页，淘宝超市。
# 启动程序后,呈现用户的选项为:
# 1,京东首页
# 2,京东超市
# 3,淘宝首页
# 4,淘宝超市
# 5,退出程序
# 四个函数都加上认证功能，用户可任意选择,用户选择京东超市或者京东首页,只要输入一次京东账号和密码并成功,
# 则这两个函数都可以任意访问;用户选择淘宝超市或者淘宝首页,
# 只要输入一次淘宝账号和密码并成功,则这两个函数都可以任意访问.
# 相关提示：用带参数的装饰器。装饰器内部加入判断，验证不同的账户密码。
'''
msg = """
1.京东首页
2.京东超市
3.淘宝首页
4.淘宝超市
5.退出程序
"""

a1 = True
a2 = True
def index(aa):
    def func(c):
        def foo():
            global a1, a2
            a = True
            if aa == '淘宝':
                while a and a1 == True:
                    user = input('请输入用户名：')
                    pwd = input('请输入密码：')
                    with open(r'D:\代码\作业\day15taobao.txt', mode='r', encoding='utf-8')as f:
                        for i in f:
                            username,password = i.strip().split(',')
                            if user == username and pwd == password:
                                print('登陆成功')
                                a = False
                                a1 = False
                                break
                            else:
                                print('用户名或密码错误，请重新输入')

            elif aa == '京东':
                while a and a2 == True:
                    user = input('请输入用户名：')
                    pwd = input('请输入密码：')
                    with open(r'D:\代码\作业\day15jingdong.txt', mode='r', encoding='utf-8')as f:
                        for i in f:
                            username, password = i.strip().split(',')
                            if user == username and pwd == password:
                                print('登陆成功')
                                a = False
                                a2 = False
                                break
                            else:
                                print('用户名或密码错误，请重新输入')
            ret = c()
            return ret
        return foo
    return func

@index('京东')
def jingdong():
    print('欢迎进入京东首页')

@index('京东')
def jingdong1():
    print('欢迎进入京东超市')

@index('淘宝')
def taobao():
    print('欢迎进入淘宝首页')

@index('淘宝')
def taobao1():
    print('欢迎进入淘宝超市')

dic = {
    '1': jingdong,
    '2': jingdong1,
    '3': taobao,
    '4': taobao1,
    '5': exit
}

while 1:
    num = input(msg)
    if num in dic:
        dic[num]()
    else:
        print('输入有误，请重新输入')
'''

# 4.给l1 = [1,1,2,2,3,3,6,6,5,5,2,2]去重，不能使用set集合（面试题）。

'''
l1 = [1,1,2,2,3,3,6,6,5,5,2,2]
def func(a):
    lst = []
    for i in a:
        if i not in lst:
            lst.append(i)
    return lst
print(func(l1))
 '''

# 5.用递归函数完成斐波那契数列（面试题）：
# 斐波那契数列：1，1，2，3，5，8，13，21..........(第三个数为前两个数的和，但是最开始的1，1是特殊情况，可以单独讨论)
'''
def foo(n):
    if n == 1:
        return 1
    elif n == 2:
        return 1
    else:
        return foo(n-1) + foo(n-2)

print(foo(9))
'''

# 6.用户输入序号获取对应的斐波那契数字：比如输入6，返回的结果为8.
'''
def foo(n):
    if n == 1:
        return 1
    elif n == 2:
        return 1
    else:
        return foo(n-1) + foo(n-2)
a = int(input('请输入数字：'))
print(foo(a))
'''